#include<stdio.h>
#include<signal.h>
volatile int quit = 1;   //volatile 关键字 保持内存可见性
void handler(int errno){
    printf("quit = 1\n");
    quit = 0;
    printf("quit = 0\n");
}
int main(){
    signal(SIGINT,handler); 
    while(quit);
    printf("normal exit!!!\n");
    return 0;
}

//volatile关键字保持内存可见性 ，编译器优化很有可能导致将主执行流中没有出现修改的变量放入寄存器进行使用，
//而其他执行流修改内存变量，主执行流因为使用寄存器，而无法看到内存中的变量，最终导致代码逻辑出错 。‌‌‌‌‌‌‌‌‌‌‌‌‌